using System;
using System.Drawing;
using System.Net;
using System.IO;
using System.Text;
using System.Web;

namespace MensajesTigo
{
    public class CapaConexion
    {
        private NetworkCredential credentials = null;

        public NetworkCredential CredencialesRed
        {
            get { return credentials; }
            set { credentials = value; }
        }
        public string Password
        {
            get 
            {
                if (credentials != null)
                    return credentials.Password;
                else
                    return "";
            }
            set 
            {
                if (credentials != null)
                    credentials.Password=value;
                else
                    credentials = new NetworkCredential("",value,"");
            }
        }
        public string Usuario
        {
            get
            {
                if (credentials != null)
                    return credentials.UserName;
                else
                    return "";
            }
            set
            {
                if (credentials != null)
                    credentials.UserName = value;
                else
                    credentials = new NetworkCredential(value, "", "");
            }
        }

        public string GeneraCodigo()
        {
            try
            {
                string strRespuesta = EnviarHttpGet(Utilidades.ObtenerValorClave("GeneraCodigo"));
                if (strRespuesta.IndexOf("time=") < 0)
                    throw new Exception("No se obtuvo respuesta.");
                else
                    return strRespuesta.Replace("time=","");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public string ObtenerSesion(string nombre)
        {
            try
            {
                string URL = String.Format("{0}?orden=1&nick={1}&foo=7143",Utilidades.ObtenerValorClave("Cliente"),nombre);
                string strRespuesta = EnviarHttpGet(URL);
                if (strRespuesta.IndexOf("session=") < 0)
                    throw new Exception("No se obtuvo respuesta.");
                else
                    return strRespuesta.Replace("session=", "");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void IngresarTelefono(string sesion, Contacto contacto)
        {
            try
            {
                string URL = String.Format("{0}?orden=2&session={1}&nick={2}&dstphone={3}&pin=undefined&foo=11340", Utilidades.ObtenerValorClave("Cliente"), sesion, contacto.Nombre, contacto.Telefono);
                string strRespuesta = EnviarHttpGet(URL);
                if (strRespuesta.Length==0)
                    throw new Exception("No se obtuvo respuesta.");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void EliminarTelefono(string sesion, Contacto contacto)
        {
            try
            {
                string URL = String.Format("{0}?orden=4&session={1}&nick={2}&dstphone={3}&pin=undefined&foo=11340", Utilidades.ObtenerValorClave("Cliente"), sesion, contacto.Nombre, contacto.Telefono);
                string strRespuesta = EnviarHttpGet(URL);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void EnviarMensaje(string sesion, string nombre, string mensaje)
        {
            try
            {
                mensaje=Uri.EscapeDataString(mensaje);
                string URL = String.Format("{0}?orden=3&session={1}&nick={2}&mensaje={3}&foo=18105&d={4}", Utilidades.ObtenerValorClave("Cliente"), sesion, nombre, mensaje,Utilidades.ClaveTiempo);
                string strRespuesta = EnviarHttpGet(URL);

                if(strRespuesta!="error=00")
                    throw new Exception("Hubo un error al mandar el mensaje. Respuesta: "+strRespuesta);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private string EnviarHttpGet(string uri)
        {
            WebRequest webRequest = WebRequest.Create(uri);
            webRequest.ContentType = "application/x-www-form-urlencoded";
            webRequest.Method = "GET";
            if(credentials!=null) webRequest.Credentials = credentials;
            try
            {
                string strResp;
                WebResponse webResponse = webRequest.GetResponse();
                if (webResponse == null) return null;
                using (StreamReader sr = new StreamReader(webResponse.GetResponseStream()))
                {
                    strResp = sr.ReadLine();
                    sr.Close();
                }
                webResponse.Close();
                if (strResp != null && strResp != string.Empty)
                    return strResp.Trim();
                else
                    return strResp;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
